diff options
| author | joonhoekim <26rote@gmail.com> | 2025-12-01 16:13:43 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-12-01 16:13:43 +0900 |
| commit | 41bb0f9f67a85ac8e17d766492f79a2997d3c6e9 (patch) | |
| tree | a2d56ea5b4713fe3a762c234622570cb36729628 /app/[lng] | |
| parent | 13c8b4e48f62c1f437b1a2b10731d092fea2a83f (diff) | |
(김준회) 권한관리: 페이지 조회 권한 확인 처리
Diffstat (limited to 'app/[lng]')
| -rw-r--r-- | app/[lng]/evcp/(evcp)/layout.tsx | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/app/[lng]/evcp/(evcp)/layout.tsx b/app/[lng]/evcp/(evcp)/layout.tsx index 82b53307..7fe7f3e7 100644 --- a/app/[lng]/evcp/(evcp)/layout.tsx +++ b/app/[lng]/evcp/(evcp)/layout.tsx @@ -1,12 +1,40 @@ import { ReactNode } from 'react'; import { Header } from '@/components/layout/Header'; import { SiteFooter } from '@/components/layout/Footer'; +import { getServerSession } from "next-auth"; +import { authOptions } from "@/app/api/auth/[...nextauth]/route"; +import { verifyNonsapPermission } from "@/lib/nonsap/auth-service"; +import { PermissionChecker } from "@/components/common/permission-checker"; + +export default async function EvcpLayout({ children }: { children: ReactNode }) { + const session = await getServerSession(authOptions); + + let isAuthorized = true; + let authMessage = ""; + + // Only check permission if user is logged in + if (session?.user?.id) { + try { + const result = await verifyNonsapPermission( + parseInt(session.user.id), + ['SEARCH'] + ); + isAuthorized = result.authorized; + authMessage = result.message || ""; + } catch (error) { + console.error("Permission check failed:", error); + // Default to true in case of error to avoid blocking access due to system error + // but logic could be changed to false for strict security + isAuthorized = true; + authMessage = "Permission check error"; + } + } -export default function EvcpLayout({ children }: { children: ReactNode }) { return ( <div className="relative flex min-h-svh flex-col bg-background"> {/* <div className="relative flex min-h-svh flex-col bg-slate-100 "> */} <Header /> + <PermissionChecker authorized={isAuthorized} message={authMessage} /> <main className="flex flex-1 flex-col"> <div className='container-wrapper'> {children} @@ -15,4 +43,4 @@ export default function EvcpLayout({ children }: { children: ReactNode }) { <SiteFooter/> </div> ); -}
\ No newline at end of file +} |
